package request

// WarehouseCreateRequest 创建仓库请求
type WarehouseCreateRequest struct {
	Code           string   `json:"code" binding:"required,alphanum,max=50"`                       // 仓库编码 (字母数字)
	Name           string   `json:"name" binding:"required,max=100"`                               // 仓库名称
	Type           string   `json:"type" binding:"required,oneof=常温 冷藏 冷冻"`                        // 仓库类型 (必须是指定值之一)
	Area           *float64 `json:"area" binding:"omitempty,gte=0"`                                // 面积 (平方米, 可选, >=0)
	Capacity       *int     `json:"capacity" binding:"omitempty,gte=0"`                            // 容量 (可选, >=0)
	MinTemperature *float64 `json:"min_temperature" binding:"omitempty"`                           // 最低温度 (可选)
	MaxTemperature *float64 `json:"max_temperature" binding:"omitempty,gtefield=MinTemperature"`   // 最高温度 (可选, >= MinTemperature)
	MinHumidity    *float64 `json:"min_humidity" binding:"omitempty,gte=0,lte=100"`                // 最低湿度 (可选, 0-100)
	MaxHumidity    *float64 `json:"max_humidity" binding:"omitempty,gtefield=MinHumidity,lte=100"` // 最高湿度 (可选, >= MinHumidity, 0-100)
	Remark         string   `json:"remark" binding:"max=500"`                                      // 备注 (最大长度)
}

// WarehouseUpdateRequest 更新仓库请求
type WarehouseUpdateRequest struct {
	ID             uint     `json:"id" binding:"required"`                                         // 仓库ID
	Name           string   `json:"name" binding:"required,max=100"`                               // 仓库名称
	Type           string   `json:"type" binding:"required,oneof=常温 冷藏 冷冻"`                        // 仓库类型
	Area           *float64 `json:"area" binding:"omitempty,gte=0"`                                // 面积
	Capacity       *int     `json:"capacity" binding:"omitempty,gte=0"`                            // 容量
	MinTemperature *float64 `json:"min_temperature" binding:"omitempty"`                           // 最低温度
	MaxTemperature *float64 `json:"max_temperature" binding:"omitempty,gtefield=MinTemperature"`   // 最高温度
	MinHumidity    *float64 `json:"min_humidity" binding:"omitempty,gte=0,lte=100"`                // 最低湿度
	MaxHumidity    *float64 `json:"max_humidity" binding:"omitempty,gtefield=MinHumidity,lte=100"` // 最高湿度
	Remark         string   `json:"remark" binding:"max=500"`                                      // 备注
	Status         int      `json:"status" binding:"required,oneof=0 1"`                           // 状态 (必须是 0 或 1)
}

// WarehouseListRequest 仓库列表请求 (可能需要根据前端查询参数调整)
type WarehouseListRequest struct {
	PageRequest
	Keyword string `form:"keyword"` // 关键字(仓库编码、名称)
	Type    string `form:"type"`    // 仓库类型 (改为 string)
	Status  *int   `form:"status"`  // 状态 (改为指针 *int, 允许不传)
}

// LocationCreateRequest 创建货位请求
type LocationCreateRequest struct {
	WarehouseID uint   `json:"warehouse_id" binding:"required"`    // 所属仓库ID
	Code        string `json:"code" binding:"required,max=50"`     // 货位编码
	Name        string `json:"name" binding:"max=100"`             // 货位名称 (可选)
	Type        string `json:"type" binding:"required,max=50"`     // 货位类型 (必填)
	Area        string `json:"area" binding:"max=50"`              // 所属区域 (可选)
	Shelf       string `json:"shelf" binding:"max=50"`             // 货架号 (可选)
	Level       string `json:"level" binding:"max=50"`             // 层号 (可选)
	Capacity    *int   `json:"capacity" binding:"omitempty,gte=0"` // 容量 (可选, >=0)
	Remark      string `json:"remark" binding:"max=500"`           // 备注 (可选)
	// Status is set to 1 (enabled) by default in service
}

// LocationUpdateRequest 更新货位请求
type LocationUpdateRequest struct {
	ID          uint `json:"id" binding:"required"`           // 货位ID
	WarehouseID uint `json:"warehouse_id" binding:"required"` // 所属仓库ID (通常不允许修改，但 API 可能需要)
	// Code is usually not updatable
	Name     string `json:"name" binding:"max=100"`              // 货位名称
	Type     string `json:"type" binding:"required,max=50"`      // 货位类型
	Area     string `json:"area" binding:"max=50"`               // 所属区域
	Shelf    string `json:"shelf" binding:"max=50"`              // 货架号
	Level    string `json:"level" binding:"max=50"`              // 层号
	Capacity *int   `json:"capacity" binding:"omitempty,gte=0"`  // 容量
	Remark   string `json:"remark" binding:"max=500"`            // 备注
	Status   int    `json:"status" binding:"required,oneof=0 1"` // 状态
}

// LocationListRequest 货位列表请求
type LocationListRequest struct {
	PageRequest
	WarehouseID *uint  `form:"warehouse_id"` // 所属仓库ID (指针允许不传, 查询所有仓库)
	Keyword     string `form:"keyword"`      // 关键字(货位编码、名称)
	Type        string `form:"type"`         // 货位类型 (string)
	Area        string `form:"area"`         // 区域
	Shelf       string `form:"shelf"`        // 货架
	Level       string `form:"level"`        // 层
	Status      *int   `form:"status"`       // 状态 (指针)
}
